package org.goj.practice.mapper;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.goj.common.entity.practice.Solution;
import org.goj.practice.vo.ProblemVO;
import org.goj.practice.vo.SolutionContestVO;
import org.goj.practice.vo.SolutionSource;
import org.goj.practice.vo.StatusVO;

import java.util.List;

/**
 * <p>
 * 程序运行结果记录 Mapper 接口
 * </p>
 *
 * @author CK
 * @since 2020-12-02
 */
public interface SolutionMapper extends BaseMapper<Solution> {

    /**
     * 提交实体类返回主键ID
     *
     * @param solution 提交实体类
     * @return int
     * @author CK
     * @date 2021/3/19 19:10
     */
    int saveGetId(Solution solution);

    /**
     * 根据ID返回测评结果
     *
     * @param solutionId 提交ID
     * @return List<SolutionByIdVO>
     * @author CK
     * @date 2021/3/21 16:25
     */
    List<Solution> result(@Param(value = "solutionId") Integer solutionId);

    /**
     * 根据userId和problemId返回评测列表
     *
     * @param userId    用户ID
     * @param problemId 题目ID
     * @return List<Solution>
     * @author CK
     * @date 2021/3/22 10:01
     */
    List<Solution> listResult(@Param(value = "userId") Integer userId, @Param(value = "problemId") Integer problemId);

    /**
     * 根据userId和problemId返回评测列表
     *
     * @param userId    用户ID
     * @param problemId 题目ID
     * @param contestId 竞赛ID
     * @return List<Solution>
     * @author CK
     * @date 2021/4/25 10:23
     */
    List<Solution> listContestResult(@Param(value = "userId") Integer userId, @Param(value = "problemId") Integer problemId,
                                     @Param(value = "contestId") Integer contestId);

    /**
     * 条件查询状态
     *
     * @param page         分页
     * @param queryWrapper 查询条件
     * @return Page<StatusVO>
     * @author CK
     * @date 2021/4/12 15:19
     */
    Page<StatusVO> listStatus(Page<StatusVO> page, @Param(Constants.WRAPPER) QueryWrapper<StatusVO> queryWrapper);

    /**
     * 查询提交的第三方代码
     *
     * @param solutionId 提交ID
     * @return SolutionSource
     * @author CK
     * @date 2021/4/12 18:34
     */
    SolutionSource solutionSourceById(Integer solutionId);

    /**
     * 分页查询竞赛状态
     *
     * @param page      分页
     * @param contestId 竞赛ID
     * @return Page<SolutionContestVO>
     * @author CK
     * @date 2021/4/22 21:15
     */
    Page<SolutionContestVO> solutionContest(Page<SolutionContestVO> page, @Param(value = "contestId") Integer contestId);


}
